package mx.itesm.pruebadmescenas;

import org.andengine.engine.camera.Camera;
import org.andengine.entity.particle.BatchedSpriteParticleSystem;
import org.andengine.entity.particle.emitter.RectangleParticleEmitter;
import org.andengine.entity.particle.initializer.AccelerationParticleInitializer;
import org.andengine.entity.particle.initializer.AlphaParticleInitializer;
import org.andengine.entity.particle.initializer.ExpireParticleInitializer;
import org.andengine.entity.particle.modifier.ScaleParticleModifier;
import org.andengine.entity.sprite.ButtonSprite;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.sprite.UncoloredSprite;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.util.GLState;

public class EscenaAcercaDe extends EscenaBase 
{
	private Sprite fondo;

	@Override
	public void crearEscena() {

		fondo = new Sprite(0, 0, admRecursos.acercaDeRegion, vbom) {
			@Override
			protected void preDraw(GLState pGLState, Camera pCamera) {
				super.preDraw(pGLState, pCamera);
				pGLState.enableDither();
			}
		};

		fondo.setPosition(ProyectoJuego.ANCHO_CAMARA / 2,
				ProyectoJuego.ALTO_CAMARA / 2);
		attachChild(fondo);

		// BOTON de regresar
		// Habilitar los eventos de touch en la escena
		this.setTouchAreaBindingOnActionDownEnabled(true);

		// Crea el botón NORMAL y lo agrega a la escena
		ButtonSprite botonUno = new ButtonSprite(ProyectoJuego.ANCHO_CAMARA
				- admRecursos.btnRegresarRegion.getWidth() / 2,
				admRecursos.btnRegresarRegion.getHeight() / 2,
				admRecursos.btnRegresarRegion, vbom) {

			// Se ejecuta cada vez que el usuario hace tap sobre el botón
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {
				if (pSceneTouchEvent.isActionDown()) { // actionUp, actionDown,
														// actionMove
					admEscenas.crearEscenaMenu();
					admEscenas.setEscena(TipoEscena.ESCENA_MENU);
					admEscenas.liberarEscenaAcercaDe();
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		this.registerTouchArea(botonUno);
		this.attachChild(botonUno);

		// ***** Agregar Partículas
		agregarParticulas();
	}

	private void agregarParticulas() {

		// Fuente de partículas
		//PointParticleEmitter emisor = new PointParticleEmitter(ProyectoJuego.ANCHO_CAMARA*0.8f,
		//		admRecursos.btnRegresarRegion.getHeight());
		
		RectangleParticleEmitter emisor = new RectangleParticleEmitter(ProyectoJuego.ANCHO_CAMARA*0.5f,
				ProyectoJuego.ALTO_CAMARA,ProyectoJuego.ANCHO_CAMARA,ProyectoJuego.ALTO_CAMARA/3);

		// Valores del sistema
		final float minSpawnRate = 5;
		final float maxSpawnRate = 10;
		final int maxParticleCount = 50;

		// Crea el sistema de partículas
		BatchedSpriteParticleSystem particulas = new BatchedSpriteParticleSystem(
				emisor, minSpawnRate, maxSpawnRate, maxParticleCount,
				admRecursos.calaveraRegion, vbom);	// imagen

		// Aceleración
		particulas
				.addParticleInitializer(new AccelerationParticleInitializer<UncoloredSprite>(
						-10f, 10f, -10f, -50f));
		// Tiempo de vida
		particulas
				.addParticleInitializer(new ExpireParticleInitializer<UncoloredSprite>(
						6,9));
		// Escala de los elementos
		particulas
				.addParticleModifier(new ScaleParticleModifier<UncoloredSprite>(
						0f, 4f, 0.2f, 1.5f));
		// Transparencia
		particulas
				.addParticleInitializer(new AlphaParticleInitializer<UncoloredSprite>(
						0.1f, 0.9f));

		// Agrega el sistema de partículas a la escena
		this.attachChild(particulas);
	}

	@Override
	public void onBackKeyPressed() {
		// ¡El usuario presionó el botón BACK!
		admEscenas.crearEscenaMenu();
		admEscenas.setEscena(TipoEscena.ESCENA_MENU);
		admEscenas.liberarEscenaAcercaDe();
	}

	@Override
	public TipoEscena getTipoEscena() {
		return TipoEscena.ESCENA_ACERCA_DE;
	}

	@Override
	public void liberarEscena() {
		fondo.detachSelf();
		fondo.dispose();
		this.detachSelf();
		this.dispose();
	}

}